package com.tian.controller;

import com.tian.pojo.User;
import com.tian.service.UserService;
import com.tian.vo.PageResult;
import com.tian.vo.SysResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@CrossOrigin
@RequestMapping("/user")
public class UserController {


    @Autowired
    private UserService userService;
    /**
     * URL地址:/user/status/{id}/{status}
     * 参数: 1.id 2.status
     * 返回值: SysResuult对象
     *
     */

    @GetMapping("/hello")
    public List<User> hello(){

        return userService.findAll();
    }

    /*
     * 需求: 根据用户名和密码实现用户登录,要求返回token
     * URL:/user/Login
     * 请求参数:post json{username:"xxx",password:"xxx"}
     * 返回值:SysResult对象(token)
     * */
    @PostMapping("/login")
    public SysResult login(@RequestBody User user){
        //执行后端登录操作,要求返回token密钥
        String token= userService.login(user);
        //判断token返回值是否有效
        if(StringUtils.hasLength(token)){
            return SysResult.success(token);
        }else {
            //登陆失败
            return SysResult.fail();
        }
    }
    /**
     *
     * 1.业务需求: 根据条件进行分页查询
     * 2.请求url: /user/list
     *  请求类型: GET
     *  请求参数:后台使用PageResult对象接收
     *  返回值: SysResult(pageResult对象)
     *  分析:
     *      1.用户参数3个,
     *      2.要求返回值5个
     */
    @GetMapping("/list")
    public SysResult getUserList(PageResult pageResult){
        pageResult = userService.getUserList(pageResult);
        return SysResult.success(pageResult);
    }

    @PutMapping("/status/{id}/{status}")
    public SysResult updateStatus(User user){

        userService.updateStatus(user);
        return  SysResult.success();
    }

    /**
     * URL地址: /user/{id}
     * 参数: id
     * 返回值: Sysresult对象
     */
    @DeleteMapping("/{id}")
    public SysResult deleteUserById (@PathVariable Integer id){
        String s = userService.deleteUserById(id);
        return SysResult.success(s);
    }

    /**
     * 业务的需求: 实现用户的新增
     *  URL: /user/addUser
     *  参数: form表单进行提交
     *  类型: post请求
     */
    @PostMapping("/addUser")
    public SysResult addUser(@RequestBody User user){
        userService.addUser(user);
        return SysResult.success();
        //如果程序失败则返回201 异常处理!!!
    }

    /**
     * 业务分析: 根据用户ID查询数据库
     * URL: /user/{id}
     * 返回值: SysResult对象
     *
     */
    @GetMapping("/{id}")
    public SysResult getUserById(@PathVariable Integer id){
        User user = userService.getById(id);
        return SysResult.success(user);
    }

    /**
     * 实现用户的修改操作
     * 1.url地址: /user/updateUser
     * 2.参数 put form表单提交
     * 3.SysResult对象
     */
    @PutMapping("/updateUser")
    public SysResult updateUser(@RequestBody User user){
        String s = userService.updateUser(user);
        return SysResult.success(s);
    }
    /**
     * 验证管理员密码
     */
    @GetMapping("/auth/{username}/{password}")
    public SysResult authUser(User user){
        System.out.println(user);
        String authById = userService.getAuthById(user);
        System.out.println(authById);
        return SysResult.success(authById);
    }
}
